package pe.com.hermes.hermetic.web.controller.general;

import pe.com.hermes.hermetic.beans.TiposBean;
import pe.com.hermes.hermetic.negocio.service.HermeticFacade;

import pe.com.hermes.hermetic.negocio.ultil.Util;
import pe.com.hermes.hermetic.web.controller.base.IController;
import pe.com.hermes.hermetic.web.forms.SelecCuentaForm;

import pe.com.hermes.hermetic.web.forms.SelectMatrizForm;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/selectDenominacion.html")
public class SeleccionarDenominacionController implements IController{
    protected final static Logger logger = Logger.getLogger(SeleccionarDenominacionController.class);
    @Autowired
    private HermeticFacade servicioHermetic;
    @RequestMapping(method={RequestMethod.GET})    
    protected String showForm(ModelMap model,HttpServletRequest request)throws Exception{
        logger.info(this.getClass().toString()+" "+"metodo: GET");
        String tipoUnidMone = request.getParameter("tipoUnidMone");
        List<TiposBean> listDenominaciones = servicioHermetic.getListDenominacionesByTipUnidMone(tipoUnidMone);
        ArrayList listDenos = new ArrayList();
        Map map = (HashMap)request.getSession(false).getAttribute("chksDenosMap");
        if(map!=null){
            if(map.containsKey(tipoUnidMone)){
                listDenos = (ArrayList)map.get(tipoUnidMone);
                for(TiposBean object:listDenominaciones){
                    if(listDenos!=null){
                        if(listDenos.contains(object.getCodigo()) ){
                            object.setIsChecked(true);
                            object.setChkMarca("checked");
                            }
                    }
                }
            }
            else{
                for(TiposBean tiposBean:listDenominaciones){
                    listDenos.add(tiposBean.getCodigo());
                    tiposBean.setIsChecked(true);
                    tiposBean.setChkMarca("checked");
                }
                map.put(tipoUnidMone,listDenos);
            
            }
        }
        else{
            map = new HashMap();
            for(TiposBean tiposBean:listDenominaciones){
                listDenos.add(tiposBean.getCodigo());
                tiposBean.setIsChecked(true);
                tiposBean.setChkMarca("checked");
            }
            map.put(tipoUnidMone,listDenos);
        }
        request.getSession(false).setAttribute("chksDenosMap",map);
        model.put("listDenominaciones",listDenominaciones);
        model.put("tipoUnidMone",tipoUnidMone);
        return FORM_SELECT_DENOMINACION;
    }
    @RequestMapping(params={"accion=selectTodos","tipUnidMone","codTodos"}) 
    protected String selectTodos(@RequestParam("codTodos") boolean codTodos,@RequestParam("tipUnidMone") String tipUnidMone ,ModelMap model,HttpServletRequest request)throws Exception{
        logger.info(this.getClass().toString()+" "+"metodo: GET");
        Map map = (HashMap)request.getSession(false).getAttribute("chksDenosMap");
        ArrayList listDenos = new ArrayList();
        List<TiposBean> listDenominaciones = servicioHermetic.getListDenominacionesByTipUnidMone(tipUnidMone);        
        if(map!=null){
            if(map.containsKey(tipUnidMone)){
                listDenos = (ArrayList)map.get(tipUnidMone);
                map.remove(tipUnidMone);
                for(TiposBean tiposBean:listDenominaciones){
                    if(codTodos){
                        if(!listDenos.contains(tiposBean.getCodigo()))
                            listDenos.add(tiposBean.getCodigo());
                        tiposBean.setChkMarca("checked");
                    }
                    else{
                        if(listDenos.contains(tiposBean.getCodigo()))
                            listDenos.remove(tiposBean.getCodigo());
                    }
                }
            }
            map.put(tipUnidMone,listDenos);
        }
        else{
            map = new HashMap();
            for(TiposBean tiposBean:listDenominaciones){
                if(codTodos){
                    listDenos.add(tiposBean.getCodigo());
                    tiposBean.setChkMarca("checked");
                }
            }
            map.put(tipUnidMone,listDenos);
        }
        request.getSession(false).setAttribute("chksDenosMap",map);
        model.put("listDenominaciones",listDenominaciones);
        model.put("tipoUnidMone",tipUnidMone);
        return FORM_SELECT_DENOMINACION;
    }
}
